﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using ibba.src.norisk.DataAccess;
using ibba.src.norisk.Contracts;

namespace ibba.src.norisk.BusinessLogic
{
    public class DeParaAreaSubLimiteBL
    {
        private DeParaAreaSubLimiteDB _deParaAreaSublimiteDB;
        private CorporativoDB _corporativoDB;

        #region Construtor

        public DeParaAreaSubLimiteBL()
        {
            _deParaAreaSublimiteDB = new DeParaAreaSubLimiteDB();
            _corporativoDB = new CorporativoDB();
        }

        #endregion

        /// <summary>
        /// Recupera dos dominios de area do sublimite;
        /// </summary>
        /// <returns>Colecao de tipos de limites</returns>
        public List<AreaSubLimite> ObterAreasSublimite()
        {
            return _deParaAreaSublimiteDB.ObterAreasSubLimite();
        }

        public List<ProdutoItau> ObterProdutosItau()
        {
            return _corporativoDB.ObterProdutosItau();
        }

        public List<Estrategia> ObterEstrategias()
        {
            return _corporativoDB.ObterEstrategias();
        }

        public List<AreaInstitucional> ObterAreasInstitucionais()
        {
            return _corporativoDB.ObterAreasInstitucionais();
        }

        public DeParaAreaSubLimite ObterDeParaAreaSubLimite(int pIdAreaSubLimite)
        {
            if (pIdAreaSubLimite < 1)
                return null;
            else
                return _deParaAreaSublimiteDB.ObterDeParaAreaSubLimite(pIdAreaSubLimite);
        }
        
        public List<DeParaAreaSubLimite> ObterTodos()
        {
            return _deParaAreaSublimiteDB.ObterTodos();
        }

        public DeParaAreaSubLimite SalvarDePara(DeParaAreaSubLimite pEntidade)
        {
            var dpPro = pEntidade.ProdutosItau.Where(w => w.TipoAcaoSQL == Enums.eTipoAcaoSQL.Delete ||
                                                          w.TipoAcaoSQL == Enums.eTipoAcaoSQL.Insert ||
                                                          w.TipoAcaoSQL == Enums.eTipoAcaoSQL.Update).ToList();

            var dpEst = pEntidade.Estrategias.Where(w => w.TipoAcaoSQL == Enums.eTipoAcaoSQL.Delete ||
                                                         w.TipoAcaoSQL == Enums.eTipoAcaoSQL.Insert ||
                                                         w.TipoAcaoSQL == Enums.eTipoAcaoSQL.Update).ToList();

            var dpAre = pEntidade.AreasInstitucionais.Where(w => w.TipoAcaoSQL == Enums.eTipoAcaoSQL.Delete ||
                                                                 w.TipoAcaoSQL == Enums.eTipoAcaoSQL.Insert ||
                                                                 w.TipoAcaoSQL == Enums.eTipoAcaoSQL.Update).ToList();

            if (dpPro.Count > 0)
                pEntidade.ProdutosItau = _deParaAreaSublimiteDB.SalvarDeParaProdutosItau(pEntidade.IdAreaSubLimite, dpPro);
            
            if (dpEst.Count > 0)
                pEntidade.Estrategias = _deParaAreaSublimiteDB.SalvarDeParaEstrategia(pEntidade.IdAreaSubLimite, dpEst);
            
            if (dpAre.Count > 0)
                pEntidade.AreasInstitucionais = _deParaAreaSublimiteDB.SalvarDeParaAreaInstitucional(pEntidade.IdAreaSubLimite, dpAre);
            
            return _deParaAreaSublimiteDB.ObterDeParaAreaSubLimite(pEntidade.IdAreaSubLimite);
        }
    }
}
